// 封装四个方法：增删改查；要求返回信息

// 0. 导入模块
// 导入fs模块
import fs from 'then-fs'

// 1. 获取数据
async function getData() {
    // 读取文件信息
    const str = await fs.readFile('./data.json', 'utf8')
    return JSON.parse(str)
}

// 查询测试
// getData().then(res => { console.log(res) })

// 2. 添加数据 - 返回一个Promise对象
async function addData(obj) {
    try {
        // 读取文件信息
        const arr = await getData()
        // 添加 id
        obj.id = arr[arr.length - 1].id + 1
        arr.push(obj)
        // 写入文件数据
        fs.writeFile('./data.json', JSON.stringify(arr))
        return '添加文件成功'
    }
    catch (e) {
        return '添加失败'
    }
}

// 添加测试
// addData({
//     "auther": "张嘉佳",
//     "bookname": "云边有个小卖部",
//     "publisher": "湖北出版社",
// }).then(res => { console.log(res) })

// 3. 删除数据 - 返回一个Promise对象
async function delData(id) {
    try {
        // 获取数据
        const arr = await getData()
        // 删除元素id，和传递的id值相应的那一项
        // 过滤新数组，传递过来的id值和元素id不相同才渔鸥资格放入新数组
        const newArr = arr.filter(ele => id != ele.id)
        // 写入文件 - 写入新数组
        // 写入文件数据
        fs.writeFile('./data.json', JSON.stringify(newArr))
        return '删除成功'
    }
    catch {
        return '删除失败'
    }
}

// 删除测试
// delData(5).then(res => { console.log(res) })

// 4.修改 - 返回一个Promise对象
async function updataData(obj) {
    try {
        // 获取数据
        const arr = await getData()
        // 获取索引值，先删除元素，再添加元素
        const index = arr.findIndex(ele => obj.id == ele.id)
        arr.splice(index, 1, obj)
        // 写入文件数据
        // 写入文件数据
        fs.writeFile('./data.json', JSON.stringify(arr))
        return '修改成功'
    }
    catch {
        return '修改失败'
    }
}

// 修改测试
updataData({
    "auther": "张嘉佳",
    "bookname": "天堂旅行社",
    "publisher": "湖北出版社",
}).then(res => { console.log(res) })